// AI智能体服务
export class AIService {
  constructor() {
    this.history = [];
    this.userPreferences = null;
    this.maxHistoryLength = 20;
  }

  // 初始化用户偏好
  initUserPreferences() {
    const savedPrefs = localStorage.getItem('aiUserPreferences');
    if (savedPrefs) {
      this.userPreferences = JSON.parse(savedPrefs);
    } else {
      this.userPreferences = {
        categories: [],
        contentStyle: '全部',
        videoDuration: '不限',
        favoriteCreators: [],
        watchHistory: []
      };
    }
  }

  // 保存用户偏好
  saveUserPreferences(preferences) {
    this.userPreferences = { ...this.userPreferences, ...preferences };
    localStorage.setItem('aiUserPreferences', JSON.stringify(this.userPreferences));
  }

  // 获取用户偏好
  getUserPreferences() {
    if (!this.userPreferences) {
      this.initUserPreferences();
    }
    return this.userPreferences;
  }

  // 处理用户输入，生成AI回复
  async processUserInput(userMessage) {
    // 添加到历史记录
    this.addToHistory('user', userMessage);

    // 根据消息内容生成响应
    const response = await this.generateResponse(userMessage);
    
    // 添加AI回复到历史记录
    this.addToHistory('ai', response.text);
    
    return response;
  }

  // 生成AI回复
  async generateResponse(userMessage) {
    // 这里可以根据需要接入真实的AI API
    // 目前使用模拟回复
    return this.getMockResponse(userMessage);
  }

  // 模拟AI回复
  getMockResponse(userMessage) {
    const message = userMessage.toLowerCase();
    let response = {};

    // 根据关键词生成不同回复
    if (message.includes('推荐') || message.includes('看什么')) {
      response = this.generateRecommendationResponse(message);
    } else if (message.includes('定制') || message.includes('个性化')) {
      response = this.generateCustomizationResponse();
    } else if (message.includes('生成') || message.includes('制作') || message.includes('创意')) {
      response = this.generateCreationResponse();
    } else if (message.includes('你好') || message.includes('嗨') || message.includes('hello')) {
      response = this.generateGreetingResponse();
    } else if (message.includes('帮助') || message.includes('使用')) {
      response = this.generateHelpResponse();
    } else if (message.includes('热门') || message.includes('趋势')) {
      response = this.generateTrendingResponse();
    } else if (message.includes('谢谢') || message.includes('感谢')) {
      response = this.generateThankYouResponse();
    } else {
      response = this.generateDefaultResponse();
    }

    return response;
  }

  // 生成推荐回复
  generateRecommendationResponse(message) {
    const quickActions = ['动画', '游戏', '音乐', '科技', '美食', '生活'];
    
    let text = '我可以根据你的兴趣推荐视频内容。';
    
    // 检查是否有具体类别
    for (const category of quickActions) {
      if (message.includes(category.toLowerCase())) {
        text = `为你推荐${category}类热门视频！你想看什么样的${category}内容呢？`;
        break;
      }
    }
    
    return {
      text,
      quickActions
    };
  }

  // 生成定制化回复
  generateCustomizationResponse() {
    return {
      text: '你可以通过内容定制功能设置你的兴趣偏好，我会为你推荐更符合你口味的内容。你平时喜欢看什么类型的视频呢？',
      quickActions: ['设置偏好', '查看历史', '热门推荐']
    };
  }

  // 生成创作相关回复
  generateCreationResponse() {
    return {
      text: '我可以帮你生成视频创意和大纲建议！请告诉我你想要制作什么主题的视频，以及你希望的视频风格和长度。',
      quickActions: ['生成视频大纲', '创意 brainstorm', '制作技巧']
    };
  }

  // 生成问候回复
  generateGreetingResponse() {
    return {
      text: '你好！我是B站AI助手，很高兴为你服务。你想了解什么内容或者需要什么帮助吗？',
      quickActions: ['推荐视频', '定制内容', '生成视频创意']
    };
  }

  // 生成帮助回复
  generateHelpResponse() {
    return {
      text: '我可以帮你：\n1. 推荐个性化视频内容\n2. 根据你的兴趣定制内容偏好\n3. 生成视频创意和大纲建议\n4. 回答关于B站功能的问题\n\n你可以直接告诉我你的需求，或者使用上方的功能标签页。',
      quickActions: ['了解更多功能', '常见问题', '联系客服']
    };
  }

  // 生成热门内容回复
  generateTrendingResponse() {
    return {
      text: '当前热门内容包括：\n• 动画区：新番推荐和经典回顾\n• 游戏区：热门游戏攻略和实况\n• 音乐区：新歌首发和音乐现场\n• 科技区：数码产品评测\n• 美食区：家常菜教程和探店\n\n你想看哪个类型的热门内容？',
      quickActions: ['动画', '游戏', '音乐', '科技', '美食']
    };
  }

  // 生成感谢回复
  generateThankYouResponse() {
    return {
      text: '不客气！如果还有其他问题，随时可以问我。我会继续努力为你提供更好的服务。',
      quickActions: ['继续聊天', '推荐视频', '定制内容']
    };
  }

  // 生成默认回复
  generateDefaultResponse() {
    return {
      text: '感谢你的提问！我正在不断学习中。你可以尝试使用我的其他功能，比如推荐视频、定制内容偏好或生成视频创意。你想了解哪方面的内容呢？',
      quickActions: ['推荐视频', '定制内容', '生成视频']
    };
  }

  // 添加到历史记录
  addToHistory(sender, text) {
    this.history.push({
      sender,
      text,
      timestamp: new Date().toISOString()
    });
    
    // 限制历史记录长度
    if (this.history.length > this.maxHistoryLength) {
      this.history.shift();
    }
  }

  // 获取历史记录
  getHistory() {
    return this.history;
  }

  // 清除历史记录
  clearHistory() {
    this.history = [];
  }

  // 生成视频创意大纲
  async generateVideoOutline(topic, description, style, length) {
    // 模拟API调用延迟
    await new Promise(resolve => setTimeout(resolve, 1000));
    
    // 根据不同参数生成不同的大纲
    const outlines = {
      '动画': [
        `1. 开场：引人入胜的${topic}动画片段`,
        '2. 介绍：简要说明主题背景和创作灵感',
        '3. 角色设计：展示主要角色的设计理念',
        '4. 场景分析：讲解关键场景的构图和色彩运用',
        '5. 技术分享：介绍使用的动画技术和软件',
        '6. 创作心得：分享创作过程中的挑战和收获',
        '7. 结尾：总结并预告未来内容'
      ],
      '游戏': [
        `1. 开场：${topic}游戏精彩瞬间展示`,
        '2. 游戏介绍：概述游戏背景和玩法',
        '3. 核心玩法解析：详细讲解游戏机制',
        '4. 技巧分享：实用的游戏技巧和策略',
        '5. 常见问题解答：解决玩家常见困惑',
        '6. 个人评价：客观评价游戏优缺点',
        '7. 结尾：推荐适合的玩家群体'
      ],
      '科技': [
        `1. 开场：${topic}最新动态或亮点展示`,
        '2. 产品介绍：详细介绍产品规格和功能',
        '3. 深度评测：实际使用体验和性能测试',
        '4. 对比分析：与同类产品的对比',
        '5. 优缺点总结：客观评价产品',
        '6. 购买建议：适合哪些用户购买',
        '7. 结尾：未来发展趋势展望'
      ],
      '美食': [
        `1. 开场：成品${topic}的精美展示`,
        '2. 食材准备：详细列出所需食材和用量',
        '3. 步骤讲解：分步演示制作过程',
        '4. 技巧分享：关键步骤的小技巧',
        '5. 风味调整：如何根据个人口味调整',
        '6. 营养分析：食材的营养价值',
        '7. 结尾：成品展示和享用时刻'
      ],
      '生活': [
        `1. 开场：${topic}主题的生活场景`,
        '2. 问题引入：提出生活中常见的相关问题',
        '3. 解决方案：分享实用的解决方法',
        '4. 实例展示：实际应用的案例',
        '5. 注意事项：操作过程中的注意点',
        '6. 效果展示：方案实施后的效果',
        '7. 结尾：总结和鼓励观众尝试'
      ]
    };

    // 选择适合的大纲或使用通用大纲
    const outline = outlines[style] || [
      `1. 开场：${topic}主题引入`,
      '2. 背景介绍：相关背景知识',
      '3. 主体内容：详细讲解主题',
      '4. 案例分析：实际案例展示',
      '5. 总结归纳：核心要点总结',
      '6. 应用建议：如何应用所学',
      '7. 结尾：展望未来发展'
    ];

    // 生成视频标题
    const titleAdjectives = ['超全面', '深度', '创意', '实用', '趣味', '专业'];
    const titleNouns = ['指南', '解析', '教程', '分享', '探索', '揭秘'];
    const randomAdj = titleAdjectives[Math.floor(Math.random() * titleAdjectives.length)];
    const randomNoun = titleNouns[Math.floor(Math.random() * titleNouns.length)];
    const title = `${randomAdj}${topic}${randomNoun}`;

    // 生成素材建议
    const materialSuggestions = [
      `高质量的${topic}相关图片和视频素材`,
      '简洁明了的文字说明和字幕',
      '适当的背景音乐增强氛围',
      '图表和动画来可视化复杂信息',
      '真实案例和用户反馈',
      '专业人士的观点和建议'
    ];

    // 生成参考视频
    const referenceCount = 3;
    const references = [];
    for (let i = 1; i <= referenceCount; i++) {
      references.push({
        title: `${topic}${i}：${this.getRandomReferenceTitle(style)}`,
        author: `创作者${String.fromCharCode(64 + i)}`,
        views: this.getRandomViewCount()
      });
    }

    return {
      title,
      outline,
      materials: materialSuggestions.join('；'),
      references,
      estimatedLength: `${Math.floor(length / 60)}分${length % 60}秒`,
      difficulty: this.calculateDifficulty(topic, style),
      audience: this.suggestAudience(topic, style)
    };
  }

  // 获取随机参考视频标题
  getRandomReferenceTitle(style) {
    const titles = {
      '动画': ['角色设计全解析', '分镜技巧分享', '动画制作流程', '色彩运用指南'],
      '游戏': ['进阶技巧教学', '隐藏彩蛋揭秘', '速通攻略', '新手入门指南'],
      '科技': ['深度评测', '开箱体验', '使用技巧', '对比测试'],
      '美食': ['家常做法', '餐厅级技巧', '创新做法', '经典配方'],
      '生活': ['实用技巧', '经验分享', '改造指南', '省钱妙招']
    };
    
    const styleTitles = titles[style] || ['全面解析', '入门指南', '实战教程', '经验分享'];
    return styleTitles[Math.floor(Math.random() * styleTitles.length)];
  }

  // 生成随机观看量
  getRandomViewCount() {
    const views = [
      '10.5万', '23.8万', '56.2万', '128.3万', '45.6万',
      '78.9万', '203.4万', '9.2万', '34.7万', '67.8万'
    ];
    return views[Math.floor(Math.random() * views.length)];
  }

  // 计算视频制作难度
  calculateDifficulty(topic, style) {
    const difficulties = ['初级', '中级', '高级', '专业级'];
    // 简单的难度计算逻辑，实际应用中可以更复杂
    const topicLength = topic.length;
    const styleFactor = ['动画', '游戏'].includes(style) ? 1 : 0;
    const difficultyIndex = (topicLength % 2) + styleFactor;
    return difficulties[difficultyIndex] || '中级';
  }

  // 建议目标受众
  suggestAudience(topic, style) {
    const audiences = {
      '动画': ['动画爱好者', '动漫迷', '二次元文化爱好者'],
      '游戏': ['游戏玩家', '电竞爱好者', '游戏新手'],
      '科技': ['科技爱好者', '数码产品用户', '专业人士'],
      '美食': ['美食爱好者', '家庭主妇', '烹饪新手'],
      '生活': ['生活达人', '普通人', '相关领域从业者']
    };
    
    const styleAudiences = audiences[style] || ['相关领域爱好者', '感兴趣的观众', '初学者'];
    return styleAudiences.join('、');
  }

  // 推荐个性化内容
  getPersonalizedRecommendations(count = 5) {
    const categories = ['动画', '游戏', '音乐', '科技', '美食', '生活', '电影', '知识', '娱乐', '体育'];
    const recommendations = [];
    
    // 获取用户偏好
    const prefs = this.getUserPreferences();
    const preferredCategories = prefs.categories.length > 0 ? prefs.categories : categories;
    
    // 生成推荐
    for (let i = 0; i < count; i++) {
      const randomCategory = preferredCategories[Math.floor(Math.random() * preferredCategories.length)];
      recommendations.push({
        id: `rec_${Date.now()}_${i}`,
        title: `${this.getRandomRecommendationTitle(randomCategory)}`,
        category: randomCategory,
        views: this.getRandomViewCount(),
        duration: `${Math.floor(Math.random() * 15) + 1}:${Math.floor(Math.random() * 60).toString().padStart(2, '0')}`,
        uploadTime: `${Math.floor(Math.random() * 7) + 1}天前`,
        thumbnailUrl: this.generateThumbnailUrl(randomCategory)
      });
    }
    
    return recommendations;
  }

  // 获取随机推荐视频标题
  getRandomRecommendationTitle(category) {
    const titleTemplates = {
      '动画': ['最新番剧推荐', '经典动漫回顾', '角色解析', '剧情分析'],
      '游戏': ['热门游戏攻略', '新游试玩', '精彩操作集锦', '游戏解说'],
      '音乐': ['新歌首发', '音乐现场', '翻唱合集', '乐器教学'],
      '科技': ['数码产品评测', '科技新闻解析', '使用技巧分享', '新品开箱'],
      '美食': ['家常菜教程', '探店vlog', '烘焙教学', '美食推荐'],
      '生活': ['生活小窍门', '日常vlog', '旅行攻略', '手工DIY'],
      '电影': ['电影解说', '影评', '经典片段', '幕后花絮'],
      '知识': ['科普视频', '历史解析', '心理学科普', '冷知识'],
      '娱乐': ['明星八卦', '综艺节目', '搞笑合集', '脱口秀'],
      '体育': ['赛事回顾', '体育明星', '健身教学', '极限运动']
    };
    
    const templates = titleTemplates[category] || ['精彩内容', '热门推荐', '不容错过', '必看视频'];
    const template = templates[Math.floor(Math.random() * templates.length)];
    
    // 添加序号或修饰词使标题更自然
    const modifiers = ['超火', '必看', '最新', '深度', '详细', '全面'];
    const modifier = modifiers[Math.floor(Math.random() * modifiers.length)];
    
    return `${modifier}${category}${template}`;
  }

  // 生成缩略图URL（模拟）
  generateThumbnailUrl(category) {
    // 在实际应用中，这里应该返回真实的图片URL
    // 现在返回模拟路径
    return `/assets/${category}缩略图.jpg`;
  }

  // 分析用户观看历史，优化推荐
  analyzeWatchHistory(history) {
    if (!history || history.length === 0) {
      return { preferredCategories: [], watchPattern: '多样化' };
    }

    // 统计观看最多的类别
    const categoryCount = {};
    history.forEach(item => {
      const category = item.category || '其他';
      categoryCount[category] = (categoryCount[category] || 0) + 1;
    });

    // 找出最常看的类别
    const sortedCategories = Object.entries(categoryCount)
      .sort(([, a], [, b]) => b - a)
      .map(([category]) => category);

    // 分析观看模式
    let watchPattern = '多样化';
    if (sortedCategories.length > 0) {
      const topCategoryCount = categoryCount[sortedCategories[0]];
      const diversityRatio = topCategoryCount / history.length;
      
      if (diversityRatio > 0.6) {
        watchPattern = `专注${sortedCategories[0]}`;
      } else if (diversityRatio > 0.4) {
        watchPattern = `主要观看${sortedCategories.slice(0, 2).join('和')}`;
      }
    }

    return {
      preferredCategories: sortedCategories.slice(0, 3),
      watchPattern,
      totalWatched: history.length,
      categoryDistribution: categoryCount
    };
  }
}

// 导出单例实例
const aiService = new AIService();
export default aiService;